package io.xxx.xbutler.sdk.request;

import com.alibaba.fastjson2.annotation.JSONField;
import io.xxx.xbutler.sdk.TanJingRequest;
import io.xxx.xbutler.sdk.response.ScanCodeSignResponse;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * 商家机器人登录接口（3.0）
 * <p>
 * 1、非首次登录，商家一定要传机器人编号，否则会当成新号登录后续会出现不稳定掉线的情况。
 * 2、登录流程涉及的回调码：1025、1001、1002、1003，以上回调的vcSerialNo的值为相同值，商家可使用该参数用于做整个流程的标识或绑定。
 */
@Data
public class ScanCodeSignRequest implements TanJingRequest<ScanCodeSignResponse> {

    /**
     * 协议类型（1：IPAD协议 6：云端注入版 9：PC协议版 12：Mac协议 13：安卓平板协议）（必填）
     */
    @JSONField(name = "protocol_type")
    private Integer protocolType;

    /**
     * 登录方式（true：确认方式登录、false：直接扫码登录）
     */
    @JSONField(name = "is_cache_login")
    private Boolean isCacheLogin;

    /**
     * 机器人编号，第一次登录至开放平台的机器人，机器人编号传空。当机器人第二次登录时必传对应的机器人编号
     */
    @JSONField(name = "robot_serial_no")
    private String robotSerialNo;

    /**
     * 扫码设备的地区编码:地级市行政区域代码
     */
    @JSONField(name = "region_code")
    private Integer regionCode;

    /**
     * 公众号授权登录方式（当机器人编号有值时不判断此字段）默认传false
     */
    @JSONField(name = "is_official_account_auth")
    private Boolean isOfficialAccountAuth;

    /**
     * 机器编号，本地电脑打开uip.exe程序获取
     */
    @JSONField(name = "machine_no")
    private String machineNo;

    /**
     * 关联编号
     */
    @JSONField(name = "relation_serial_no")
    private String relationSerialNo;

    /**
     * 是否VIP设备（ 是：true、否：false）
     */
    @JSONField(name = "is_vip_device")
    private Boolean isVipDevice;

    @Override
    public String path() {
        return "/scrm/robot/scan-code-sign";
    }

    @Override
    public Map<String, Object> params() {
        return new HashMap<>() {{
            put("protocol_type", protocolType);
            put("is_cache_login", isCacheLogin);
            put("robot_serial_no", robotSerialNo);
            put("region_code", regionCode);
            put("is_official_account_auth", isOfficialAccountAuth);
            put("machine_no", machineNo);
            put("relation_serial_no", relationSerialNo);
            put("is_vip_device", isVipDevice);
        }};
    }

    @Override
    public Class<ScanCodeSignResponse> responseType() {
        return ScanCodeSignResponse.class;
    }

    @Override
    public String merchantName() {
        return "merchant_no";
    }
}
